//基于散列表的图书信息查找系统
//协作地址: https://gitee.com/fishfishfishfishfishfish/ShuJuJieGouZuoYe
#include <iostream>
#include <windows.h>
#include "library.hpp"
using namespace std;

//创建一个图书馆
library miao;

/*------下面都是TUI的代码------*/
//只是个废物扫地姬罢了
void Clear()
{
    cin.clear();
    cin.sync();
    system("cls");
}

void menu32()
{
    Clear();
    printf("      ----------------------------------      \n");
    printf("     [基于散列表的图书信息查找系统][查找]\n");
    printf("      ----------------------------------      \n");
    printf("请输入要查找的图书名称: ");
    char BookName[20];
    scanf("%s", BookName);
    printf("----------------------------------------------------------------\n");
    miao.Search_Name(BookName);
    printf("----------------------------------------------------------------\n");
}

void menu31()
{
    Clear();
    printf("      ----------------------------------      \n");
    printf("     [基于散列表的图书信息查找系统][查找]\n");
    printf("      ----------------------------------      \n");
    printf("请输入要查找的图书编码: ");
    unsigned long long ISBN;
    scanf("%llu", &ISBN);
    printf("----------------------------------------------------------------\n");
    miao.Search_ID(ISBN);
    printf("----------------------------------------------------------------\n");
}
void menu3()
{
start:
    Clear();
    printf("      ----------------------------------      \n");
    printf("        [基于散列表的图书信息查找系统]\n");
    printf("         1. 基于图书编号进行查找.\n");
    printf("         2. 基于图书名称进行查找.\n");
    printf("         0. 返回上一级菜单.\n");
    printf("      ----------------------------------      \n");
    printf("请输入数字: ");

    int i;
    scanf("%d", &i);
    switch (i)
    {
    case 1:
        menu31();
        system("pause");
        break;
    case 2:
    {
        menu32();
        system("pause");
        break;
    }
    case 0:
        break;
    default:
        printf("输入错误, 请重新输入.");
        Sleep(2000);
        goto start;
        break;
    }
}

void menu42()
{
    Clear();
    printf("      ----------------------------------      \n");
    printf("     [基于散列表的图书信息查找系统][打印]\n");
    printf("      ----------------------------------      \n");
    printf("图书编号\t图书名称\t\t主编姓名\t图书价格\n");
    miao.Print_Name();
    system("pause");
}

void menu41()
{
    Clear();
    printf("      ----------------------------------      \n");
    printf("     [基于散列表的图书信息查找系统][打印]\n");
    printf("      ----------------------------------      \n");
    printf("图书编号\t图书名称\t\t主编姓名\t图书价格\n");
    miao.Print_ID();
    system("pause");
}

void menu4()
{
start:
    Clear();
    printf("      ----------------------------------      \n");
    printf("        [基于散列表的图书信息查找系统]\n");
    printf("         1. 以图书编号为关键字.\n");
    printf("         2. 以图书名称为关键字.\n");
    printf("         0. 返回上一级菜单.\n");
    printf("      ----------------------------------      \n");
    printf("请输入数字: ");

    int i;
    scanf("%d", &i);
    switch (i)
    {
    case 1:
        menu41();
        break;
    case 2:
        menu42();
        break;
    case 0:
        break;
    default:
        printf("输入错误, 请重新输入.");
        Sleep(2000);
        goto start;
        break;
    }
}

void menu21()
{
    Clear();
    printf("      ----------------------------------      \n");
    printf("     [基于散列表的图书信息查找系统][删除]\n");
    printf("      ----------------------------------      \n");
    printf("请输入需要删除的图书编号: ");
    unsigned long long ISBN;
    scanf("%llu", &ISBN);
    printf("----------------------------------------------------------------\n");
    miao.Delete_ID(ISBN);
    printf("----------------------------------------------------------------\n");
}

void menu22()
{
    Clear();
    printf("      ----------------------------------      \n");
    printf("     [基于散列表的图书信息查找系统][删除]\n");
    printf("      ----------------------------------      \n");
    printf("请输入要删除的图书名称: ");
    char BookName[20];
    scanf("%s", BookName);
    printf("----------------------------------------------------------------\n");
    miao.Delete_Name(BookName);
    printf("----------------------------------------------------------------\n");
}

void menu2()
{
start:
    Clear();
    printf("      ----------------------------------      \n");
    printf("        [基于散列表的图书信息查找系统]\n");
    printf("         1. 删除指定图书编号\n");
    printf("         2. 删除指定图书名称\n");
    printf("         0. 返回上一级菜单.\n");
    printf("      ----------------------------------      \n");
    printf("请输入数字: ");

    int i;
    scanf("%d", &i);
    switch (i)
    {
    case 1:
        menu21();
        system("pause");
        break;
    case 2:
        menu22();
        system("pause");
        break;
    case 0:
        break;
    default:
        printf("输入错误, 请重新输入.");
        Sleep(2000);
        goto start;
        break;
    }
}

void menu1()
{
    Clear();
    printf("      ----------------------------------      \n");
    printf("     [基于散列表的图书信息查找系统][输入]\n");
    printf("             (退出输入请直接回车)\n");
    printf(" [图书编号] [图书名称] [主编姓名] [图书价格]\n");
    miao.input();
}

void menu0()
{
    bool flag = 1;
    while (flag)
    {
        //简陋的菜单
        Clear();
        printf("      ----------------------------------      \n");
        printf("        [基于散列表的图书信息查找系统]\n");
        printf("         1. 录入图书记录.\n");
        printf("         2. 删除图书记录.\n");
        printf("         3. 搜索图书.\n");
        printf("         4. 打印散列表.\n");
        printf("         0. 退出系统.\n");
        printf("      ----------------------------------      \n");
        printf("请输入数字: ");

        int i;
        scanf("%d", &i);
        switch (i)
        {
        case 1:
            menu1();
            break;

        case 2:
            menu2();
            break;

        case 3:
            menu3();
            break;

        case 4:
            menu4();
            break;

        case 0:
            flag = 0;
            Clear();
            break;

        default:
            printf("输入错误, 请重新输入.");
            Sleep(2000);
            break;
        }
    }
}

int main()
{
    //START
    menu0();
    //END
    return 0;
}
